package com.example.user.customviewdemo.drawing.canvas;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

/**
 * 人生最纠结的事情不是你甘于平淡，而是你明明不希望平凡却不知道未来应该怎么办。
 * ----摘自《三十岁那年，我的梦想是年薪十万》
 * Created by user on 2016/4/22.
 * 对canvas的操作
 */
public class MyDealCanvasView extends View {
    public MyDealCanvasView(Context context) {
        super(context);
    }

    public MyDealCanvasView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyDealCanvasView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(10);


        /**************canvas.translate()**************************/
        /**
         1、每次调用canvas.drawXXXX系列函数来绘图进，都会产生一个全新的Canvas画布。
         2、如果在DrawXXX前，调用平移、旋转等函数来对Canvas进行了操作，那么这个操作是不可逆的！每次产生的画布的最新位置都是这些操作后的位置。（关于Save()、Restore()的画布可逆问题的后面再讲）
         3、在Canvas与屏幕合成时，超出屏幕范围的图像是不会显示出来的。
         4、使用translate和rotate等属性操作时，是对canvas坐标系进行操作，而不是canvas，但仍可以使用save和restore对状态进行保存和恢复
         5、使用clip函数裁剪时不会改变canvas的坐标系，可以用save和restore对状态进行操作
         */
       Rect rect = new Rect(0, 0, 200, 100);
        canvas.drawColor(Color.GRAY);
        canvas.drawRect(rect, paint);//没有移动时绘制rect

        canvas.translate(300, 300);
        canvas.drawRect(rect, paint);//移动后绘制rect


        //*************canvas的旋转canvas.rotate(floag degress)/.rotate(float degress,float x,float y)******************//*
       // rect = new Rect(100,100,300,200);
        paint.setStyle(Paint.Style.FILL);
        canvas.rotate(60);//默认旋转中心为（0,0）
        canvas.drawRect(rect,paint);//旋转后绘制rect

        //*************canvas缩放canvas.scale(float x,float y)*********************************//*
        rect = new Rect(400,0,600,200);
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.GREEN);
        canvas.drawRect(rect,paint);
        canvas.scale(1.3f,1);//x轴密度变成1.3倍，所以图形横向变长到原来的1.3倍
        paint.setColor(Color.RED);
        canvas.drawRect(rect,paint);

        //*************canvas扭曲canvas.skew(float sx,float sy)***********************//*
        canvas.rotate(-60);
        canvas.translate(-300,-300);//将canvas恢复至原位
        rect = new Rect(0,500,200,700);
        canvas.drawRect(rect,paint);
        paint.setColor(Color.GREEN);
        canvas.skew(1.732f,0);
        canvas.drawRect(rect,paint);


        //***************canvas的clip（）、save（）和restore（）****************************//*




    }
}
